მონაცემთა თავმოყრა

ხშირია შემთხვევები, როდესაც ერთი და იგივე ვაკანსია რამდენიმე ვებ-გვერდზე ქვეყნდება. ამიტომ მონაცემთა თავმოყრისას საჭიროა მათი გაცხრილვა. ამ მიზნით სამი ძირითადი კრიტერიუმი შევარჩიეთ: ვაკანსიის დასახელება, დამსაქმებელი და ვაკანსიაზე განაცხადის შეტანის ბოლო ვადა. ამ კრიტერიუმებს თავისი დამატებითი ნიუანსები ახლავს.

  • ვაკანსიის დასახელების და დამსაქმებლის ველების განხილვისას გასათვალისწინებელია, რომ jobs.ge-ზე ვაკანსიის დეტალები ძირითადად ქართულ და ინგლისურ ენებზე ქვეყნდება, hr.ge-ზე ერთ რომელიმე ენაზე, ხოლო hr.gov.ge-ზე მხოლოდ ქართულად. ამიტომ შედარებისას jobs.ge-ს ველების ორივე თარგმანს გამოვიყენებთ.
  • არის შემთხვევები როდესაც ერთი და იგივე ვაკანსია ოდნავ განსხვავებული სახელწოდებით გვხვდება job.ge-ზე და hr.ge-ზე. მაგალითად, ერთგან შეიძლება შეგვხვდეს „კრედიტ-ოფიცერი“ და მდებარეობის ველში მითითებული იყოს ორი ან მეტი რეგიონი/ქალაქი, სადაც ვაკანსიაა გამოცხადებული, ხოლო მეორეგან „კრედიტ-ოფიცერი თბილისში, რუსთავსა და გორში“ და ვაკანსიის დასახელებაშივე იყოს ჩამოთვლილი მთელი რიგი რეგიონები/ქალაქები, სადაც ვაკანსიაა გამოცხადებული. თუმცა ასეთი შემთხვევები არც ისე ხშირია (სულ 15 შემთხვევა 17,000-ზე მეტი ვაკანსიიდან). ამიტომ ამ საკითხის გადაჭრა შემდეგი ეტაპისთვის გადავდეთ.
  • ბოლო ვადის შემთხვევაში შევნიშნეთ, რომ ხშირად განცხადება რამდენიმე დღის „დაგვიანებით“ ქვეყნდება მეორე ვებ-გვერდზე. შესაბამისად, გამოქვეყნების თარიღიც და განაცხადის შეტანის ბოლო ვადაც რამდენიმე დღით არის ხოლმე გადაწეული. ამიტომ გადავწყვიტეთ, ბოლო ვადის ველში სამ- ან ნაკლებ-დღიანი აცდენა დასაშვებად ჩაგვეთვალა.

კრიტერიუმებს ვამოწმებთ ქვემოთ მოცემული ფუნქციის (R-ში) გამოყენებით.

add_row_to_df <- function(row, df, n = 4) {
  index1 <- (row$position_cleaned == df$position_cleaned) | 
    (row$position_eng_cleaned == df$position_cleaned)
  index1[is.na(index1)] <- FALSE
  if (any(index1) == FALSE) {test <- FALSE} else {
    df1 <- df[index1,]
    index2 <- (row$employer_cleaned == df1$employer_cleaned) | 
      (row$employer_eng_cleaned == df1$employer_cleaned)
    index2[is.na(index2)] <- FALSE
    if (any(index2) == FALSE) {test <- FALSE} else {
      df2 <- df1[index2,]
      x <- row$ბოლო_ვადა[1] 
      if (is.na(x)) {test <- TRUE} else {
        test <- any(abs(x - c(as.Date("01011900", format = '%d%m%Y'), 
                            df2$ბოლო_ვადა[!is.na(df2$ბოლო_ვადა)])) < n) 
      }
    }
  }
  return(!test)                          
}

ანუ, add_row_to_df(row, df) ამოწმებს ვაკანსია (row, ვთქვათ, jobs.ge-დან) ემთხვევა თუ არა არსებულ მონაცემთა ბაზაში (df ვთქვათ, hr.ge) რომელიმე ვაკანსიას. თუ ემთხვევა, ფუნქცია აბრუნებს FALSE-ს, რაც ნიშნავს, რომ row-ს ვაკანსია არ უნდა დავამატოთ მონაცემთა ბაზას. შესაბამისად, თუ არ ემთხვევა, ფუნქცია აბრუნებს TRUE-ს.

ასევე გადასაწყვეტია, განმეორებული ვაკანსიების წყვილებიდან (ან სამეულებიდან) რომელი დავტოვოთ ჩვენ მონაცემთა ბაზაში. როგორც მონაცემთა წყაროების აღწერაში ვახსენეთ, hr.ge-ზე jobs.ge-სთან შედარებით მეტი დეტალია ცალკე ველში მითითებული და, შესაბამისად, ადვილად მიკვლევადი. ხოლო, hr.gov.ge-ზე ყველაზე მეტი ინფორმაციაა მოცემული ასეთი “მზა სახით”. ამიტომ, განმეორებული ვაკანსიების შემთხვევაში უპირატესობას მივანიჭებთ პირველ რიგში hr.gov.ge-ს და შემდეგ hr.ge-ს.

მონაცემთა გაცხრილვის და თავმოყრისთვის გამოყენებული სრული კოდი ხელმისაწვდომია ჩვენ GitHub გვერდზე და თავსებადია მონაცემთა შესაგროვებლად გამოყენებულ კოდთან.